WAIT(2) | 리눅스 프로그래머 매뉴얼 | WAIT(2) |
이름¶
wait, waitpid - 프로세스 종료를 기다린다.
사용법¶
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)
pid_t waitpid(pid_t pid, int *status, int
options);
설명¶
wait 함수는 자식이 종료될 때까지, 또는 현재 프로세스를 종료시키거나 시그널 처리 함수를 호출하는 행동을 하는 신호가 전달될 때까지 현재 프로세스의 실행을 일시 중지시킨다. 만일 자식이 호출 시간에 이미 종료되었다면(좀비 프로세스), 함수는 즉시 리턴한다. 자식이 사용한 시스템 자원들은 모두 풀어진다.
waitpid 함수는 pid 인자가 가리키는 자식이 종료될 때 까지, 또는 현재 프로세스를 종료시키거나 시그널 처리 함수를 호출하는 행동을 하는 신호가 전달될때까지 현재 프로세스의 실행을 일시 중지시킨다.
만일 pid 로 지정된 자식이 호출 시간에 이미 종료되었다면(좀비 프로세스), 함수는 즉시 리턴한다. 자식이 사용한 시스템 자원들은 모두 풀어진다.
pid 값은 다음 중 하나이다:
- < -1
- 이것은 프로세세 그룹 ID가 pid의 절대 값과 같은 어떤 자식 프로세스를 기다리라는 의미이다.
- -1
- 이것은 어떤 자식 프로세스를 기다리라는 의미이다; 이것은 wait 에서 나타난 것과 같은 행동을 한다.
- 0
- 이것은 프로세스 그룹 ID가 호출 프로세스의 ID와 같은 어떤 자식 프로세스를 기다리라는 의미이다.
- > 0
- 이것은 프로세스 ID가 pid의 값과 같은 자식을 기다리라는 의미이다.
options 의 값은 0 이거나 다음 상수의 어떤것과 OR 이다.
만일 status 가 NULL이 아니라면 wait 또는 waitpid 는 status가 가리키는 위치에 상태 정보를 저장한다.
이 상태는 다음 매크로들로 평가된다.(이들 매크로는 인자로써 stat 버퍼 (int)를 가지고 있다. -- 버퍼에 대한 포인터가 아니다!)
- WIFEXITED(status)
- 자식이 정상적으로 종료되었다면 non-zero 이다.
- WEXITSTATUS(status)
- exit() 를 호출하기 위한 인자나 주 프로그램에서 return 문장을 위한 인자로써 설정되고 종료된 자식의 반환 코드의 최하위 8비트를 평가한다. 이 매크로는 WIFEXITED 가 non-zero 를 반환할 때만 평가된다.
- WIFSIGNALED(status)
- 만일 자식 프로세스가 잡혀지지 않은 신호때문에 종료되었다면 참을 반환한다.
- WTERMSIG(status)
- 자식 프로세스를 종료하도록 야기한 신호의 숫자를 반환한다. 이 매크로는 만일 WIFSIGNALED 가 non-zero 를 반환할 경우만 평가된다.
- WIFSTOPPED(status)
- 반환의 원인이 된 자식 프로세스가 현재 정지되어 있다면 참을 반환한다.; 이것은 이 함수가 WUNTRACED를 사용했을 때만 가능하다.
- WSTOPSIG(status)
- 자식을 정지하도록 야기한 신호의 숫자를 반환한다. 이 매크로는 WIFSTOPPED 가 non-zero 를 반환할 경우만 평가된다.
반환값¶
종료된 자식의 프로세스 ID는 에러일때 -1 이거나 만일 WNOHANG 이 사용되고 어떤 자식도 이용할 수 없다면 0을 반환한다. (각각의 경우, errno 는 적당한 값으로 설정된다.)
에러¶
- ECHILD
- 만일 pid 로 지정된 프로세스가 존재하지 않거나 호출 프로세스의 자식이 아닐 경우 이다. (이것은 SIGCHLD 에 대한 행동이 SIG_IGN 으로 설정되었다면 자신의 자식을 위해 일어날 수 있다.)
- EINVAL
- options 인자가 유효하지 않을 경우이다.
- ERESTARTSYS
- 만일 WNOHANG 가 설정되지 않고 신호가 봉쇄되지 않았거나 SIGCHLD 가 잡혔을 때이다. 이 에러는 시스템 콜에서 반환된다. 라이브러리 인터페이스는 ERESTARTSYS를 반환할 때 허용되지 않는다. 그러나 EINTR는 반환된다.
주의¶
단일 유닉스 명세서는 SA_NOCLDWAIT 플래그가 설정되어 있거나 SIGCHLD에 대한 행동이 SIG_IGN(그러나 POSIX에서는 허용되지 않는다.)로 설정되어 있을 경우에 이 플래그(리눅스에서는 존재하지 않는다)를 기술한다. 그리고 종료된 자식들은 좀비가 되지 않으며 wait() 또는 waitpid() 함수의 호출은 모든 자식들이 종료될 때까지 봉쇄될 것이며 errno 를 ECHILD으로 설정하고 실패한다.
호환¶
SVr4, POSIX.1
관련 항목¶
번역¶
정강훈 <skyeyes@soback.kornet.net>
2000년 8월 7일
한글 Manpage 프로젝트
(http://man.kldp.org) 2005년 2월 11일
1997년 6월 23일 | Linux |